# 自媒体登陆页面对象
import allure
from selenium.webdriver.common.by import By

from base.mp.base import BasePage, BaseHandle


# 定义对象库层
class LoginPage(BasePage):  # 这里的(BasePage)代表继承了BasePage就可以直接使用其中的方法
    def __init__(self):
        super().__init__()
        # 手机号码输入框
        self.mobile = By.XPATH, '//*[@id="loginForm"]/div[1]/div[1]/div[1]/div[1]/input'
        # 验证码输入框
        self.code = By.ID, 'loginCode'
        # 登录按钮
        self.loginbtn = By.CSS_SELECTOR, 'button[type="submit"]'

    # 定义手机号码输入框
    def find_mobile(self):
        return self.get_element(self.mobile)

    # 定义验证码输入框
    def find_code(self):
        return self.get_element(self.code)

    # 定义登录按钮
    def find_loginbtn(self):
        return self.get_element(self.loginbtn)


# 定义操作层对象
class LoginHandle(BaseHandle):
    def __init__(self):
        self.login_page = LoginPage()  # 实例化了上面的LoginPage()对象

    # 输入手机号码
    @allure.step(title="输入手机号")
    def input_mobile(self, mobile):
        # self.login_page.find_mobile()获取电话框对象
        self.input_text(self.login_page.find_mobile(), mobile)

    # 输入验证码
    @allure.step(title="输入验证码")
    def input_code(self, code):
        self.input_text(self.login_page.find_code(), code)

    # 点击登录按钮
    @allure.step(title="点击登录按钮")
    def click_login_btn(self):
        self.login_page.find_code().click()


# 定义业务层
class LoginProxy:
    def __init__(self):
        self.login_handle = LoginHandle()  # 实例化操作层对象

    # 登录业务
    def login(self, mobile, code):
        self.login_handle.input_mobile(mobile)  # 输入手机号吗
        self.login_handle.input_code(code)  # 输入验证吗
        self.login_handle.click_login_btn()  # 点击登录按钮
